home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Just Call Me Internet
/
Just Call Me Internet.iso
/
prog
/
atari
/
m2
/
cat3src
/
cat
/
editbase.d
< prev
next >
Wrap
Text File
|
1997-10-26
|
5KB
|
126 lines
DEFINITION MODULE EditBase;
FROM SYSTEM IMPORT ADDRESS;
FROM EditTypes IMPORT EDITPTR, aBufferPtr;
TYPE Error = (notFound, notEnoughMem, lineToLong);
CONST memBlockSize = $7FE0; (* Gre der einzelnen Blcke im Editor *)
VAR eReason : Error;
PROCEDURE InsertBuffer (VAR ed : EDITPTR; VAR buff : ADDRESS; len : LONGCARD; freeBuffer: BOOLEAN): BOOLEAN;
(* Es wird ein Text aus einem Buffer in ed an der aktuellen Stelle eingefgt.
*)
PROCEDURE CopyToBuff(VAR ed : EDITPTR; tStartLine, tEndLine : LONGINT;
VAR addBuf : ADDRESS; VAR len : LONGCARD) : BOOLEAN;
(* Kopieren von einem EditBuffer in einen anderen.
* Es wird der aus dem Editor in addBuf der Bereich von
* tStartLine bis tEndLine kopiert.
* Neue Fassung, die alles in einen Block kopiert und nicht in n kleine Blcke.
*)
(*
PROCEDURE CopyFromBuff(VAR ed : EDITPTR; tStartLine : LONGINT; addBuf : aBufferPtr; prev : BOOLEAN) : BOOLEAN;
(* Kopieren von einem EditBuffer in einen anderen.
* Es wird der Sourcebuffer hinter die Zeile
* tStartLine angehngt.
*)
*)
PROCEDURE GetOffset (VAR ed : EDITPTR) : INTEGER;
(* Setzt Buffer auf CurrentLine und berechnet Offset in
* currentBuffer fr currLineNr und currRow
*)
PROCEDURE GetPos (VAR ed : EDITPTR; offset : INTEGER; VAR line : LONGINT; VAR row : INTEGER);
(* Berechnet aus Offset in currentBuff die aktuelle
* Zeile und Spalte
*)
PROCEDURE GetLineLength (VAR ed : EDITPTR; lineNum : LONGINT; VAR len : INTEGER) : BOOLEAN;
(* Liefert die Lnge der Zeile lineNum
* FALSE: Zeile nicht vorhanden.
*)
PROCEDURE GetLineAdr (VAR ed : EDITPTR; lineNum : LONGINT; VAR text : ADDRESS; VAR len : INTEGER) : BOOLEAN;
(* Liefert die Adresse der Zeile und die Lnge.
* Nur fr Lesezugriff!
* FALSE: Zeile nicht vorhanden
*)
PROCEDURE GetLine (VAR ed : EDITPTR; lineNum : LONGINT; VAR str : ARRAY OF CHAR; VAR len : INTEGER) : BOOLEAN;
(* Holt die Zeile lineNum aus der Bufferliste
* FALSE: Entweder ist der String str fr die Zeile zu kurz,
* dann steht in len schon die bentigte Lnge,
* oder die Zeile existiert nicht, dann ist len = 0.
*)
PROCEDURE PutLine (VAR ed : EDITPTR; lineNum : LONGINT; VAR str : ARRAY OF CHAR; len : INTEGER) : BOOLEAN;
(* Ersetzt eine Zeile im Buffer.
* FALSE: Entweder Zeile ist nicht vorhanden, oder es ist nicht mehr
* genug Speicher da, um die Zeile einzufgen.
* Im zweiten Fall sollte man ein CompactBuffer aufrufen und
* es dann nochmal versuchen.
* Grund steht in der globalen Variable eReason.
*)
PROCEDURE InsertCr (VAR ed : EDITPTR; lineNum : LONGINT; row : INTEGER) : BOOLEAN;
(* Trennt die Zeile lineNum an der Stelle row auf.
* FALSE: Kein Speicherplatz mehr frei.
*)
PROCEDURE InsertLine (VAR ed : EDITPTR; lineNum : LONGINT; VAR str : ARRAY OF CHAR; pre : BOOLEAN; len : INTEGER) : BOOLEAN;
(* Fgt die Zeile lineNum im Buffer ein.
* Wenn pre = TRUE ist, dann wird die Zeile vor die alte Zeile lineNum gesetzt,
* ansonsten hinter die Zeile lineNum.
* Ergebnis: FALSE: Nicht genug Speicher mehr frei
*)
PROCEDURE DeleteSomeLines (VAR ed : EDITPTR; from, to : LONGINT) : BOOLEAN;
(* Lscht einen Bereich von Zeilen ber mehrere Blcke hinweg
* Dabei wird mittels deleteLineBlock in den ueren Blcken
* gelscht und die inneren Blcke entfernt.
*)
PROCEDURE DeleteLine (VAR ed : EDITPTR; lineNum : LONGINT) : BOOLEAN;
(* Lscht die Zeile lineNum im Buffer
* FALSE: Zeile nicht vorhanden
*)
PROCEDURE CompactBuffer (VAR ed : EDITPTR) : BOOLEAN;
(* Kompaktiert den Bufferspeicher. FALSE: Nicht mehr mglich, da
* gar kein Speicher mehr frei war.
*)
PROCEDURE GetCurrLine (VAR ed : EDITPTR; VAR str : ARRAY OF CHAR; VAR len : INTEGER);
(* Liefert die aktuelle Zeile, in der der Cursor steht.
*)
PROCEDURE PutCurrLine (VAR ed : EDITPTR) : BOOLEAN;
(* Schiebt die aktuelle Zeile, in der der Cursor steht, wieder in den Buffer.
* FALSE: Kein Speicher mehr frei
*)
PROCEDURE GetBuffer (VAR ed : EDITPTR; defSize : INTEGER) : BOOLEAN;
(* Erzeugt einen neuen Buffer hinter currentBuff
* Es wird nur der Textbuffer und der Descriptor alloziert,
* das LineArray noch nicht.
* Der Buffer erhlt die Gre defSize, falls dieser Wert sinnvoll ist.
*)
PROCEDURE FreeBuffer (VAR ed : EDITPTR);
(* Hngt aktuellen Buffer (currentBuff) aus Liste aus
* und gibt alle Speicherblcke frei.
* Es wird keine Prfung vorgenommen, ob noch Text enthalten ist!
*)
PROCEDURE CountBytes (VAR ed: EDITPTR; fromLine : LONGINT; fromRow: INTEGER;
toLine: LONGINT; toRow: INTEGER; VAR bytes: LONGCARD);
(* Zhlt die Bytes, die von dem Text zwischen den beiden Textmarken belegt werden
*)
END EditBase.